﻿using WatiN.Core;
using AttributeConstraint=WatiN.Core.Constraints.AttributeConstraint;

namespace WatiNCF.Extensions
{
    public static class AttributeConstraintExtensions
    {
        public static void Set(this AttributeConstraint control, IE ie)
        {
            Set(control, ie, string.Empty);
        }

        public static Element Set(this AttributeConstraint control, IE ie, string input)
        {
            if (ie.TextField(control).Exists)
            {
                ie.TextField(control).TypeText(input);
            }
            else if (ie.Button(control).Exists)
            {
                ie.Button(control).Click();
            }
            else if (ie.SelectList(control).Exists)
            {
                ie.SelectList(control).Select(input);
            }
            else if (ie.Link(control).Exists)
            {
                ie.Link(control).Click();
            }

            return ie.Element(control);
        }

        public static Element SetValue(this AttributeConstraint control, IE ie, string input)
        {
            if (ie.TextField(control).Exists)
            {
                ie.TextField(control).Value = input;
            }
            else if (ie.SelectList(control).Exists)
            {
                ie.SelectList(control).SelectByValue(input);
            }

            return ie.Element(control);
        }

        public static Element Get(this AttributeConstraint control, IE ie, out string output)
        {
            output = string.Format("Control with value {0} could not be found.", control.Value);

            if (ie.TextField(control).Exists)
            {
                output = ie.TextField(control).Text;
            }
            else if (ie.Button(control).Exists)
            {
                output = ie.Button(control).Text;
            }
            else if (ie.SelectList(control).Exists)
            {
                output = ie.SelectList(control).SelectedItem;
            }
            else if (ie.Link(control).Exists)
            {
                output = ie.Link(control).Text;
            }
            else if (ie.Span(control).Exists)
            {
                output = ie.Span(control).Text;
            }

            return ie.Element(control);
        }
    }
}
